﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Kaesoft.Hospedaje.Entities;

namespace Kaesoft.Hospedaje.Services
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IServicioAdministracion" in both code and config file together.
    [ServiceContract]
    public interface IServicioAdministracion
    {
        [OperationContract]
        [ServiceKnownType(typeof(Usuario))]
        Usuario ValidarCredenciales(string login, string pass);

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        List<Perfil> ObtenerPerfiles();

        [OperationContract]
        [ServiceKnownType(typeof(Usuario))]
        PaginatedList<Usuario> ObtenerUsuariosPorCriterios(int tipoConsulta, string criterio, int indice);

        [OperationContract]
        [ServiceKnownType(typeof(Usuario))]
        void GrabarUsuarios(List<Usuario> usuarios);

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        List<Perfil> ListarArbolPerfiles();

        [OperationContract]
        [ServiceKnownType(typeof(Opcion))]
        List<Opcion> ListarArbolOpciones();

        [OperationContract]
        [ServiceKnownType(typeof(Opcion))]
        List<Opcion> ListarArbolOpcionesPorId(Guid idOpcion);

        [OperationContract]
        [ServiceKnownType(typeof(Operacion))]
        List<Operacion> ListarOperaciones();

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        Perfil ObtenerPerfilPorId(Guid idPerfil);

        [OperationContract]
        [ServiceKnownType(typeof(Operacion))]
        List<Operacion> ObtenerOperacionPorPerfilYOpcion(Guid idPerfil, Guid idOpcion);

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        Perfil InsertarNuevoPerfil(Perfil nuevoPerfil);

        [OperationContract]
        [ServiceKnownType(typeof(PerfilOpcion))]
        [ServiceKnownType(typeof(PerfilOpcionOperacion))]
        bool ActualizaPerfil(string perfilNombre, Guid perfilId, List<PerfilOpcion> poEliminar, List<PerfilOpcion> poAgregar, List<PerfilOpcionOperacion> pooEliminar, List<PerfilOpcionOperacion> pooAgregar);

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        bool EliminaPerfiles(List<Perfil> perfiles);

        [OperationContract]
        [ServiceKnownType(typeof(Perfil))]
        Perfil ObtenerPerfilPorNombre(string nombrePerfil);

        [OperationContract]
        [ServiceKnownType(typeof(Usuario))]
        void RestaurarClave(Guid idUsuarioResetear);

        [OperationContract]
        [ServiceKnownType(typeof(Usuario))]
        Dictionary<string, int> ValidaUsuario(Usuario usuarioValidar);

        [OperationContract]
        [ServiceKnownType(typeof(Operacion))]
        List<Operacion> ObtenerDatosOpcionOperacion(Guid idPerfil, Guid idOpcion);

        [OperationContract]
        [ServiceKnownType(typeof(Operacion))]
        void GuardaOperacion(PerfilOpcion PropiedadPerfilOpcion);

        [OperationContract]
        [ServiceKnownType(typeof(Operacion))]
        PerfilOpcion ObtenerPerfilOpcion(Guid IdPerfil, Guid IdOpcion);

        [OperationContract]
        [ServiceKnownType(typeof(PerfilOpcion))]
        [ServiceKnownType(typeof(PerfilOpcionOperacion))]
        bool GuardarPerfilOpcion(string perfilNombre, Guid perfilId, List<PerfilOpcion> poAgregar);

        [OperationContract]
        [ServiceKnownType(typeof(PerfilOpcion))]
        [ServiceKnownType(typeof(PerfilOpcionOperacion))]
        bool ActualizaPerfilF(string perfilNombre, Guid perfilId);
    }
}
